package classes;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import Exceptions.DadosInsuficientesExceptions;
import Exceptions.LoginJaCadastradoException;
import Exceptions.UsuarioInexistenteException;

public class Cadastra {
	
	private HashMap<String, Usuario> cadastro;
	
	public Cadastra() {
		cadastro = new HashMap<String, Usuario>();
	}

	

	public HashMap<String, Usuario> getCadastro() {
		return cadastro;
	}

	public void cadastra(String nome, String login, String rua, String numero, String bairro, String cidade,String estado, String complemento)
			throws Exception {
		if (cadastro.containsKey(login)) {
			throw new LoginJaCadastradoException("Login ja esta cadastrado.");
		}
		cadastro.put(TratamentoDeErros.validaString(login), new Usuario(nome, login, new Endereco(rua, numero, bairro, cidade, estado, complemento)));
	}



	public ArrayList listaUsuarios(String nomeUsuarioOuEndereco){
		ArrayList<Usuario> usuariosEncontrados = new ArrayList<Usuario>();
		Set set = cadastro.entrySet();
		Iterator i = set.iterator();
		while (i.hasNext()) {
			Map.Entry entrada = (Map.Entry) i.next();
			Usuario u1 = (Usuario) entrada.getValue();
			if (nomeUsuarioOuEndereco.equalsIgnoreCase(u1.getNome())){
				usuariosEncontrados.add(u1);
			}
			
			if (nomeUsuarioOuEndereco.equalsIgnoreCase(u1.getEndereco().getRua()) || nomeUsuarioOuEndereco.equalsIgnoreCase(u1.getEndereco().getCidade()) || nomeUsuarioOuEndereco.equals(u1.getEndereco().getNumero()) || nomeUsuarioOuEndereco.equalsIgnoreCase(u1.getEndereco().getEstado()) || nomeUsuarioOuEndereco.equalsIgnoreCase(u1.getEndereco().getComplemento())){
				usuariosEncontrados.add(u1);
			}
		}
		
		return usuariosEncontrados;
	}
	
	public Usuario acessaUsuario(String login) throws DadosInsuficientesExceptions{
		return cadastro.get(TratamentoDeErros.validaString(login));
	}
	
	public void removeUsuario(String login) throws UsuarioInexistenteException, DadosInsuficientesExceptions{
		if(!cadastro.containsKey(login)){
			throw new UsuarioInexistenteException("Usuario Inexistente");
		}
		
		cadastro.remove(login);
	}
	
}